#ifndef AFFICHAGE_H
#define AFFICHAGE_H


#include <SDL.h>
#include "graphe.h"

#define LARGEUR 640
#define HAUTEUR 480
#define MARGE 40

#define BLEU SDL_MapRGB(ecran->format, 0x00, 0x00, 0xFF)
#define ROUGE SDL_MapRGB(ecran->format, 0xFF, 0x00, 0x00)
#define BLEUCLAIR SDL_MapRGB(ecran->format, 0x00, 0xEF, 0xEF)
#define ROSE SDL_MapRGB(ecran->format, 0xFF, 0x60, 0x60)



/* FONCTION DE PAUSE */

/* Un grand classique */
void pause();



/* CALCULS DE COORDONNEES */

/* Adapte les coordonnées des sommets de g, préalablement initialisées,
   aux dimensions de la fenêtre d'affichage */
void setCoordonneesEuclidiennes(Graphe* g);

/* Répartit les coordonnées des sommets de g, préalablement initialisées,
   sur une grille adaptée aux dimensions de la fenêtre d'affichage */
void setCoordonneesLattice(Graphe* g);

/* Répartit les coordonnées des sommets de g, préalablement initialisées,
   sur un cercle adapté aux dimensions de la fenêtre d'affichage */
void setCoordonneesCercle(Graphe* g);



/* AFFICHAGE DE GRAPHES */

/* Affiche le graphe g (sommets importants en rouge, autres sommets en bleu,
   arêtes en cyan)
   Lors de l'appui sur une touche, affiche en sus les Aretes à rénover
   (contenues dans tabSolution, de longueur longsol) en rose
       villes vaut 1, 2 ou 3 selon que l'affichage des villes doit être de type
       "naturel", "lattice", ou "circulaire"
       routes vaut 0 pour que l'épaisseur des arêtes soit constante, et vaut 1
       pour qu'elle soit proportionnelle au poids. */
void affichageGraphe(Graphe* g, const int villes, const int routes, const Arete* tabSolution, const int longsol, SDL_Surface* ecran);

/* Affiche les Aretes de g à rénover (contenues dans tabSolution, de
   longueur longsol) en rose
       taille vaut 0 pour que l'épaisseur des arêtes soit constante, et vaut 1
       pour qu'elle soit proportionnelle au poids. */
void affichageRoutesImportantes(const Graphe* g, const Arete* tab, const int longueur, const int taille, SDL_Surface* ecran);

/* Affiche les Aretes de g en bleu
       routes vaut 0 pour que l'épaisseur des arêtes soit constante, et vaut 1
       pour qu'elle soit proportionnelle au poids. */
void affichageRoutes(const Graphe* g, const int routes, SDL_Surface* ecran);

/* Affiche les sommets importants de g en rouge, les autres en bleu,
       villes vaut 1, 2 ou 3 selon que l'affichage des villes doit être de type
       "naturel", "lattice", ou "circulaire", 0 si les coordonnées sont déjà
	   paramétrées */
void affichageVilles(Graphe* g, const int villes, SDL_Surface* ecran);



/* FONCTION DE TEST */

/* Teste les fonctions du module Affichage
   Les affichages dans la console et dans la fenêtre attestent
   du travail en cours
   Retourne 0 si le test est concluant */
int testAffichage(SDL_Surface *ecran);




#endif
